import router from '@/router';
import { useTagsViewStore } from '@/store/modules/tagsView';

export default {
	/**
	 * 刷新当前tab页签
	 * @param obj 标签对象
	 */
	async refreshPage (obj) {
		const { path, query, matched } = router.currentRoute.value;
		if (obj === undefined) {
			matched.forEach((m) => {
				if (m.components && m.components.default && m.components.default.name) {
					if (!['Layout', 'ParentView'].includes(m.components.default.name)) {
						obj = {
							name: m.components.default.name,
							path: path,
							query: query,
							matched: undefined,
							fullPath: undefined,
							hash: undefined,
							params: undefined,
							redirectedFrom: undefined,
							meta: undefined
						};
					}
				}
			});
		}
		let query1 = {};
		let path1 = '';
		if (obj) {
			query1 = obj.query;
			path1 = obj.path;
		}
		await useTagsViewStore().delCachedView(obj);
		await router.replace({
			path: '/redirect' + path1,
			query: query1
		});
	},
	// 关闭当前tab页签，打开新页签
	closeOpenPage (obj) {
		useTagsViewStore().delView(router.currentRoute.value);
		if (obj !== undefined) {
			router.push(obj);
		}
	},
	// 关闭指定tab页签
	async closePage (obj) {
		if (obj === undefined) {
			// prettier-ignore
			const { visitedViews } = await useTagsViewStore().delView(router.currentRoute.value)
			const latestView = visitedViews.slice(-1)[0];
			if (latestView) {
				return router.push(latestView.fullPath);
			}
			return router.push('/');
		}
		return useTagsViewStore().delView(obj);
	},
	// 关闭所有tab页签
	closeAllPage () {
		return useTagsViewStore().delAllViews();
	},
	// 关闭左侧tab页签
	closeLeftPage (obj) {
		return useTagsViewStore().delLeftTags(obj || router.currentRoute.value);
	},
	// 关闭右侧tab页签
	closeRightPage (obj) {
		return useTagsViewStore().delRightTags(obj || router.currentRoute.value);
	},
	// 关闭其他tab页签
	closeOtherPage (obj) {
		return useTagsViewStore().delOthersViews(obj || router.currentRoute.value);
	},
	/**
	 * 打开tab页签
	 * @param url 路由地址
	 * @param title 标题
	 * @param query 参数
	 */
	openPage (url, title, query) {
		const obj = { path: url, query: { ...query, title } };
		return router.push(obj);
	},
	/**
	 * 修改tab页签
	 * @param obj 标签对象
	 */
	updatePage (obj) {
		return useTagsViewStore().updateVisitedView(obj);
	}
};
